/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fi.uba.algo3.tp3.vista.actores;

import ar.uba.fi.algo3.titiritero.Dibujable;
import ar.uba.fi.algo3.titiritero.SuperficieDeDibujo;
import ar.uba.fi.algo3.titiritero.vista.ImagenPNG;
import fi.uba.algo3.tp3.modelo.notificaciones.StateNotification;
import fi.uba.algo3.tp3.vista.Observador;
import fi.uba.algo3.tp3.vista.actores.imagen.ImagenBean;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author ariel
 */
public class VistaJugador extends ImagenPNG implements Observador{

    private static int MAX_IMAGENES=3;
    private List<ImagenBean> animacion;
    private Integer offSetAnimacion;
    private Integer punteroAnimacion;

    public VistaJugador(StateNotification state) {
        animacion = new LinkedList<ImagenBean>();
        //offSetAnimacion=bean.getPointer();
        //Apunta a la posicion 0 del vector de imagenes
        notificar(state);
        //punteroAnimacion=(offSetAnimacion-MAX_IMAGENES);
    }

    @Override
    public void dibujar(SuperficieDeDibujo superficeDeDibujo) {
        synchronized(this) {
            Integer punteroAux=punteroAnimacion%offSetAnimacion;
            if(punteroAux==0) {
                punteroAnimacion=(offSetAnimacion-MAX_IMAGENES);
            } else{
                punteroAnimacion=(punteroAnimacion%offSetAnimacion);
            }
            animacion.get(punteroAnimacion).dibujar(superficeDeDibujo);
            punteroAnimacion++;
        }
    }

    @Override
    public void notificar(StateNotification notification) {
        if(notification!=null) {
            switch(notification) {
                case IZQUIERDA:
                    break;
                case ABAJO:
                    break;
                case DERECHA:
                    break;
                case ARRIBA:
                    break;
                case AFECTADO:
                    notification=StateNotification.ABAJO;
                    break;
                case NORMAL:
                    notification=StateNotification.IZQUIERDA;
                    break;
                case MUERTO:
                    notification=StateNotification.DERECHA;
                    break;
            }
            setAnimacionActual(notification.getPointer());
        } else {
            // Es no chequeada porque rope la firma del contrato
            throw new NullPointerException(notification.name());
        }
    }

    public void agregarImagen(ImagenBean foto) {
        this.animacion.add(foto);
    }

    private void setAnimacionActual(Integer value) {
        synchronized(this) {
            offSetAnimacion=value;
            punteroAnimacion=(offSetAnimacion-MAX_IMAGENES);
        }
    }

    public void setImagenes(List<ImagenBean> animaciones) {
        this.animacion=animaciones;
    }

}
